#include <iostream>
#include <stdio.h>
using namespace std;

/*
    1.cout 打印地址,你只需要重点记忆，char * 无法直接打印地址
    cout << &6 << endl;   &n6 是数组指针 不是char *，因此可以打印地址
    cout << &n7 << endl;  &n7 是char **,不是char *，因此可以打印地址

    2.g++比gcc更加严格
    void *p 是万能指针
    char *p1 = p;  // gcc 放水,编译通过
                   // g++编译给你警告
    char *p2 = "great";  // gcc编译通过
                         // g++编译给你警告,great是字符串常量，常量是只读的，不可以修改，因此要加const修饰
*/
int main()
{
    int n1 = 10;
    short n2 = 20;
    unsigned long n3 = 30;
    float n4 = 3.14;
    double n5 = 3.1415926;

    cout << &n1 << endl;
    cout << &n2 << endl;
    cout << &n3 << endl;
    cout << &n4 << endl;
    cout << &n5 << endl;

    // 对于char *，c语言可以通过%s %p区分究竟是当成字符串还是地址
    char n6[10] = "hello";
    const char *n7 = "world";

    printf("当成字符串 %s\n", n6);
    printf("当成地址   %p\n", n6);

    printf("当成字符串 %s\n", n7);
    printf("当成地址   %p\n", n7);

    cout << n6 << endl;
    cout << n7 << endl;

    cout << &n6 << endl;
    cout << &n7 << endl;

    // 解决方法： 把char * 强转成非char *
    cout << "char *当成地址打印  " << (void *)n6 << endl;
    cout << "char *当成地址打印  " << (void *)n7 << endl;
    return 0;
}

//  n7的地址？？？